package com.hera.base.util;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;



public class FiltroDTO implements Serializable {

	private static final long serialVersionUID = -4049059411172908645L;
	private List<ParametroDTO> lstParametroDTO=null;
	private List<ParametroDTO> lstOrdenamientoDTO=null;
	private List<String> aliasDTO=null;
	
	public FiltroDTO() {
		lstParametroDTO=new ArrayList<ParametroDTO>();
		lstOrdenamientoDTO=new ArrayList<ParametroDTO>();
		setAliasDTO(new ArrayList<String>());
	}
	
	public FiltroDTO(String ... alias) {
		this();
		for(String alia:alias) {
			getAliasDTO().add(alia);
		}
	}
	
	public void addAlias(String alias){
		getAliasDTO().add(alias);
	}
	
	public void clear(){
		lstParametroDTO=new ArrayList<ParametroDTO>();
		lstOrdenamientoDTO=new ArrayList<ParametroDTO>();
	}
	
	@SuppressWarnings("unchecked")
	public <T> T getParametro(String nombreParametro,Class<T> clase){
		int index=lstParametroDTO.indexOf(new ParametroDTO(nombreParametro));
		if(index==-1){return null;}
		ParametroDTO parametroDTO=lstParametroDTO.get(index);
		if(parametroDTO==null){
			return null;
		}
		return (T)parametroDTO.getValorParametro();
	}
	public Object getParametro(String nombreParametro){
		int index=lstParametroDTO.indexOf(new ParametroDTO(nombreParametro));
		if(index==-1){return null;}
		ParametroDTO parametroDTO=lstParametroDTO.get(index);
		if(parametroDTO==null){
			return null;
		}
		return parametroDTO.getValorParametro().equals("")?null:parametroDTO.getValorParametro();
	}
	
	public List<ParametroDTO> getFiltro(){
		return lstParametroDTO;
	}
	public List<ParametroDTO> getOrdenamiento(){
		return lstOrdenamientoDTO;
	}
	
	public void addParametro(String nombreParametro,Object valorParametro){
		ParametroDTO parametroDTO=new ParametroDTO();
		parametroDTO.setNroOrden(lstParametroDTO.size());
		parametroDTO.setNombreParametro(nombreParametro);
		parametroDTO.setValorParametro(valorParametro);
		parametroDTO.setTipoParametro(ParametroDTO.TIPO_IGUAL);
		parametroDTO.setTipoDato(valorParametro.getClass());
		lstParametroDTO.add(parametroDTO);	
	}
	public void addParametroLike(String nombreParametro,Object valorParametro){
		ParametroDTO parametroDTO=new ParametroDTO();
		parametroDTO.setNroOrden(lstParametroDTO.size());
		parametroDTO.setNombreParametro(nombreParametro);
		parametroDTO.setValorParametro(valorParametro);
		parametroDTO.setTipoDato(valorParametro.getClass());
		parametroDTO.setTipoParametro(ParametroDTO.TIPO_LIKE);
		lstParametroDTO.add(parametroDTO);	
	}
	public void addOrdenamientoAscendente(String nombreParametro){
		ParametroDTO parametroDTO=new ParametroDTO();
		parametroDTO.setNroOrden(lstOrdenamientoDTO.size());
		parametroDTO.setNombreParametro(nombreParametro);
		parametroDTO.setOrdenamiento(ParametroDTO.ORDEN_ASCENDENTE);
		lstOrdenamientoDTO.add(parametroDTO);	
	}
	public void addOrdenamientoDescendente(String nombreParametro){
		ParametroDTO parametroDTO=new ParametroDTO();
		parametroDTO.setNroOrden(lstOrdenamientoDTO.size());
		parametroDTO.setNombreParametro(nombreParametro);
		parametroDTO.setOrdenamiento(ParametroDTO.ORDEN_DESCENDENTE);
		lstOrdenamientoDTO.add(parametroDTO);	
	}

	

	public List<ParametroDTO> getLstParametroDTO() {
		return lstParametroDTO;
	}

	public void setLstParametroDTO(List<ParametroDTO> lstParametroDTO) {
		this.lstParametroDTO = lstParametroDTO;
	}

	public List<ParametroDTO> getLstOrdenamientoDTO() {
		return lstOrdenamientoDTO;
	}

	public void setLstOrdenamientoDTO(List<ParametroDTO> lstOrdenamientoDTO) {
		this.lstOrdenamientoDTO = lstOrdenamientoDTO;
	}

	public List<String> getAliasDTO() {
		return aliasDTO;
	}

	public void setAliasDTO(List<String> aliasDTO) {
		this.aliasDTO = aliasDTO;
	}
	
	
	
}
